package com.service.single.example.reflect;

import com.service.single.entity.SystemUser;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;

/**
 * 反射取值
 */
public class ReflectHandle {

    /**
     * 字段值校验
     *
     * @param user       需要校验的实体类
     * @param properties 自定义需要校验的实体类属性
     * @return
     */
    private boolean verifyFields(SystemUser user, String[] properties) {
        boolean flag = true;
        Field[] fields = user.getClass().getDeclaredFields();
        try {
            // 去空格后，重新赋值
            for (Field field : fields) {
                field.setAccessible(true);
                Object value = field.get(user);
                String typeName = field.getType().getName();
                if (StringUtils.equals(typeName, String.class.getTypeName()) && ObjectUtils.isNotEmpty(value)) {
                    String name = field.getName();
                    // &nbsp; 类型空格 trim方法可以去除, Excel还有一种特殊空格 NBSP 需用正则去除
                    String v = ((String) value).trim().replaceAll("(\\u00A0+)", "");
                    Field f = user.getClass().getDeclaredField(name);
                    f.setAccessible(true);
                    f.set(user, v);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

}
